package com.ruoyi.common.utils;

import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * 图片处理
 * @Author Alan Zhang
 * @Date 2025/4/3 10:50
 */
public class JtImageUtil {

    private static final Logger log = LoggerFactory.getLogger(JtImageUtil.class);
    /**
     * 本地图片文件路径
     * @param imgUrl 图片地址
     * @return
     */
    public static String toLocalPath(String imgUrl){
        if(StringUtils.isNotEmpty(imgUrl)){
            if(imgUrl.contains(Constants.RESOURCE_PREFIX)){
                // 上传文件路径
                String filePath = RuoYiConfig.getProfile();
                int d = Constants.RESOURCE_PREFIX.length();
                int index = imgUrl.indexOf(Constants.RESOURCE_PREFIX);

                String path = filePath + imgUrl.substring((index+d));
                return path;
            }
        }
        return "";
    }


    /**
     * 删除本地图片文件
     * @param imgUrl 相对图片URL地址
     * @return
     */
    public static boolean deleteFile(String imgUrl){
        boolean flag = false;
        if(StringUtils.isNotEmpty(imgUrl)){
            flag = delLocalFile(imgUrl);
        }
        return flag;
    }


    /**
     *
     * 删除 文件及分片文件
     */
    public static void deleteFileAndChunks(String imgUrl){
        if(StringUtils.isNotEmpty(imgUrl) && imgUrl.contains(Constants.RESOURCE_PREFIX)) {
            delLocalFile(imgUrl);

            File file = new File(convertLocalPath(imgUrl));
            System.out.println(imgUrl);
            String chunksPath = file.getParent() + "\\chunks";

            System.out.println(chunksPath);
            deleteDirFile(new File(chunksPath));
        }
    }

    /**
     * 删除文件夹下的所有文件
     */
    private static void deleteDirFile(File file){
        if(file == null){
            return;
        }
        File[] listFiles = file.listFiles();
        if (listFiles != null) {
            for (File lf : listFiles) {
                if (lf.isDirectory()) {
                    deleteDirFile(lf);
                } else {
                    lf.delete();
                }
            }
        }
        file.delete();
    }

    public static boolean deleteArrayFile(String imgUrlArray){
        boolean flag = false;
        if(StringUtils.isNotEmpty(imgUrlArray)){
            if(imgUrlArray.contains(",")){
                String[] imgUrls  = imgUrlArray.split(",");
                for (String item: imgUrls) {
                    flag = delLocalFile(item);
                }
            }
        }
        return flag;
    }

    /**
     *
     * 删除本地文件
     * @param imgUrl
     * @return
     */
    private static boolean delLocalFile(String imgUrl){
        if(imgUrl.contains(Constants.RESOURCE_PREFIX)){
            String path = convertLocalPath(imgUrl);
            return FileUtils.deleteFile(path);
        } else {
            return false;
        }
    }


    /**
     * 转本地路径
     * @param imgUrl
     * @return
     */
    public static String convertLocalPath(String imgUrl){
        // 上传文件路径
        String filePath = RuoYiConfig.getProfile();
        int d = Constants.RESOURCE_PREFIX.length();
        int index = imgUrl.indexOf(Constants.RESOURCE_PREFIX);

        String path = filePath + imgUrl.substring((index+d));
        log.info("path==={}", path);
        return path;
    }

    /**
     * 款式 图片
     * @param multipartFile 上传文件
     * @param isRename 是否重命名
     * @return
     * @throws IOException
     */
    public static String upload(MultipartFile multipartFile, boolean isRename) throws IOException {
        // 上传文件路径
        String filePath = RuoYiConfig.getUploadPath();
        // 上传并返回新文件名称
        String fileName = FileUploadUtils.upload(filePath, multipartFile, false, isRename);
        return fileName;
    }


    /**
     * 产品 图片
     * @param multipartFile 上传文件
     * @param isRename 是否重命名
     * @return
     * @throws IOException
     */
    public static String uploadProduct(MultipartFile multipartFile, boolean isRename) throws IOException {
        // 上传文件路径
        String filePath = RuoYiConfig.getUploadProductPath();
        // 上传并返回新文件名称
        String fileName = FileUploadUtils.upload(filePath, multipartFile, false, isRename);
        return fileName;
    }

    /**
     * 产品 缩略图片
     * @param multipartFile 上传文件
     * @param isRename 是否重命名
     * @return
     * @throws IOException
     */
    public static String uploadProductThumbnail(MultipartFile multipartFile, boolean isRename) throws IOException {
        // 上传文件路径
        String filePath = RuoYiConfig.getUploadProductThumbnailPath();
        // 上传并返回新文件名称
        String fileName = FileUploadUtils.upload(filePath, multipartFile, true, isRename);
        return fileName;
    }

    /**
     * 分销商 图片
     * @param multipartFile 上传文件
     * @param isRename 是否重命名
     * @return
     * @throws IOException
     */
    public static String uploadDistributor(MultipartFile multipartFile, boolean isRename) throws IOException {
        // 上传文件路径
        String filePath = RuoYiConfig.getUploadDistributorPath();
        // 上传并返回新文件名称
        String fileName = FileUploadUtils.upload(filePath, multipartFile, false, isRename);
        return fileName;
    }


    /**
     * 横幅 图片
     * @param multipartFile 上传文件
     * @param isRename 是否重命名
     * @return
     * @throws IOException
     */
    public static String uploadBanner(MultipartFile multipartFile, boolean isRename) throws IOException {
        // 上传文件路径
        String filePath = RuoYiConfig.getUploadBannerPath();
        // 上传并返回新文件名称
        String fileName = FileUploadUtils.upload(filePath, multipartFile, false, isRename);
        return fileName;
    }

    /**
     * 客户售后 图片
     * @param multipartFile 上传文件
     * @param isRename 是否重命名
     * @return
     * @throws IOException
     */
    public static String uploadService(MultipartFile multipartFile, boolean isRename) throws IOException {
        // 上传文件路径
        String filePath = RuoYiConfig.getUploadServicePath();
        // 上传并返回新文件名称
        String fileName = FileUploadUtils.upload(filePath, multipartFile, false, isRename);
        return fileName;
    }

    /**
     * 溯源 图片
     * @param multipartFile 上传文件
     * @param isRename 是否重命名
     * @return
     * @throws IOException
     */
    public static String uploadTraceability(MultipartFile multipartFile, boolean isRename) throws IOException {
        // 上传文件路径
        String filePath = RuoYiConfig.getUploadProductTraceabilityPath();
        // 上传并返回新文件名称
        String fileName = FileUploadUtils.upload(filePath, multipartFile, false, isRename);
        return fileName;
    }

    /**
     * 服务网点 图片
     * @param multipartFile 上传文件
     * @param isRename 是否重命名
     * @return
     * @throws IOException
     */
    public static String uploadBranchService(MultipartFile multipartFile, boolean isRename) throws IOException {
        // 上传文件路径
        String filePath = RuoYiConfig.getUploadBranchServicePath();
        // 上传并返回新文件名称
        String fileName = FileUploadUtils.upload(filePath, multipartFile, false, isRename);
        return fileName;
    }
}
